import itertools

# Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数。
# 首先，我们看看itertools提供的几个“无限”迭代器：
natuals = itertools.count(1)


def printN():
    for n in natuals:
        print(n)


# printN()

# 无限序列虽然可以无限迭代下去，但是通常我们会通过takewhile()等函数根据条件判断来截取出一个有限的序列：
ns = itertools.takewhile(lambda x: x < 10, natuals)
print(list(ns))
# cycle()会把传入的一个序列无限重复下去：
cs = itertools.cycle('AVFDDEGHH')


def printCs():
    for n in cs:
        print(n)


# printCs()
# repeat()负责把一个元素无限重复下去，不过如果提供第二个参数就可以限定重复次数：
rp = itertools.repeat('AFWWG', 3)


def printrP():
    for n in rp:
        print(n)


printrP()


# chain()
# chain()可以把一组迭代对象串联起来，形成一个更大的迭代器：
def chainTest():
    for n in itertools.chain('121434', 'rtruyrt'):
        print(n)


# chainTest()


# groupby() 分组
# groupby()把迭代器中相邻的重复元素挑出来放在一起：
def groupTest():
    for key, group in itertools.groupby('AAABBBCCAAA'):
        print(key, list(group))


groupTest()
